#pragma once

#include <string>
#include <map>
#include <memory>
#include "teflon/gapi/texture2d.h"
#include "teflon/gapi/shader.h"

namespace teflon
{
    std::string get_asset_path(const char* file_name);

    enum class AssetType
    {
        SHADER,
        TEXTURE2D,
        SPRITE_SHEET,
        MESH,
    };

    class AssetManager
    {
    private:
        std::map<std::string, std::shared_ptr<Texture2D>> texture_map;
        std::map<std::string, std::shared_ptr<ShaderProgram>> shader_map;

        static std::shared_ptr<AssetManager> g_manager;
    public:
        AssetManager() {}
        static std::shared_ptr<AssetManager> GetAssetManager();

        std::shared_ptr<Texture2D> LoadTexture(const std::string& texture_name);
        std::shared_ptr<ShaderProgram> LoadShader(const std::string& shader_name);
    };

}

